;; ;; C# macros

;; IF statement
(fset 'cs-if
   [?\C-a tab ?i ?f ?( ?) return ?{ return ?} ?\C-r ?{ ?\C-m ?\C-f return ?\C-r ?( ?\C-m ?\C-f])
(local-set-key "\C-ci" 'cs-if)

;; ;; WHILE loop
(fset 'cs-while
   [?\C-a tab ?w ?h ?i ?l ?e ?( ?) return ?{ return ?} ?\C-r ?{ ?\C-m ?\C-f return ?\C-r ?( ?\C-m ?\C-f])
(local-set-key "\C-cw" 'cs-while)

;; ;; FOREACH loop
(fset 'cs-foreach
   [?\C-a tab ?f ?o ?r ?e ?a ?c ?h ?( ?) return ?{ return ?} ?\C-r ?{ ?\C-m ?\C-f return ?\C-r ?( ?\C-m ?\C-f])
(local-set-key "\C-ce" 'cs-foreach)

;; ;; FOR loop
(fset 'cs-for
   [?\C-a tab ?f ?o ?r ?( ?\; ?\; ?) return ?{ return ?} ?\C-r ?{ ?\C-f return ?\C-r ?( ?\C-f])
(local-set-key "\C-cf" 'cs-for)

;; ;; String.Format
(fset 'cs-string-format
   "\C-r\"\C-mString.Format(\C-f\C-s\"\C-m, )\C-r,\C-m\C-f")
(local-set-key "\C-cs" 'cs-string-format)

;; ;; TRY/CATCH
(fset 'cs-try-catch
   [?\C-a tab ?t ?r ?y return ?{ return ?} ?\C-r ?{ ?\C-m ?\C-f return ?\C-n ?\C-n tab ?c ?a ?t ?c ?h ?( ?) return ?{ return ?} ?\C-r ?{ ?\C-m ?\C-f return ?\C-r ?{ ?\C-r ?\C-m ?\C-f ?\C-n tab])
(local-set-key "\C-ct" 'cs-try-catch)

;; ;; Plain old curly braces
(fset 'cs-braces
   [?\C-a tab ?{ return ?} ?\C-r ?{ ?\C-m ?\C-f return])
(local-set-key "\C-cb" 'cs-braces)

;; Console.WriteLine
(fset 'cs-console-writeline
   [?\C-a tab ?C ?o ?n ?s ?o ?l ?e ?. ?W ?r ?i ?t ?e ?L ?i ?n ?e ?( ?) ?\C-b ?\C-e ?\; ?\C-r ?( ?\C-m ?\C-f])
(local-set-key "\C-cl" 'cs-console-writeline)

;; 'Using' directive
(fset 'cs-using
   "using System.;\C-b")
(local-set-key "\C-cu" 'cs-using)

;; Mini-skeleton for C#
(fset 'cs-skeleton
   [?u ?s ?i ?n ?g ?  ?S ?y ?s ?t ?e ?m ?l backspace ?\; return return ?n ?a ?m ?e ?s ?p ?a ?c ?e return ?{ return return ?} ?\C-p tab ?p ?u ?b ?l ?i ?c ?  ?c ?l ?a ?s ?s return ?{ return ?} return ?\C-p ?\C-p ?\C-e return ?p ?u ?b ?l ?i ?c return ?{ return ?} ?\C-p return])
(local-set-key "\C-cn" 'cs-skeleton)

;; Getter, Setter
(fset 'cs-getsetredux
   [tab ?{ ?} ?\C-b return ?\C-p ?\C-e return ?g ?e ?t ?  ?{ ?  ?r ?e ?t ?u ?n backspace ?r ?n ?  ?t ?h ?i ?s ?. ?  ?\; ?  ?} return ?s ?e ?t ?  ?{ ?  ?t ?h ?i ?s ?. ?  ?= ?  ?v ?a ?l ?u ?e ?\; ?  ?} ?\C-r ?r ?e ?t ?\C-m ?\C-s ?\; ?\C-m ?\C-p ?\C-n ?\C-b ?\C-b])
(local-set-key "\C-cg" 'cs-getsetredux)

;; Abbrev expand keycombo
(local-set-key "\C-ca" 'expand-abbrev)
